<?php

class Mcontroles extends CI_Model {

    function __construct() {
        //llamando al constructor
        parent::__construct();
    }

    function getMarcaciones() {
        $query = "select idmmarcacionOriginal as idmmarcacion,ngps_latitud,ngps_longitud, 
            dFechaCreacion, dHoraCell from mmarcacionoriginal";
        //$query.="where id_prov=0";
        $tabla = $this->db->query($query);
        return $tabla->result_array();
    }

    function getMarcacionMapa($idMarcacion) {
        $cota = $idMarcacion - 500;
//        $query = "select idmmarcacion,ngps_latitud,ngps_longitud, dFechaCreacion, dHoraCell from mmarcacion 
//            where idmmarcacion<=$idMarcacion and idmmarcacion>=$cota limit 500";
//        
        $query = "select idmmarcacionOriginal as idmmarcacion,ngps_latitud,ngps_longitud, dFechaCreacion, dHoraCell 
        from mmarcacionoriginal 
            where idmmarcacionOriginal<=$idMarcacion and idmmarcacionOriginal>=$cota limit 500";
        //$query.="where id_prov=0";
        $tabla = $this->db->query($query);
        return $tabla->result_array();
    }

    function insertaMarcacion($lat, $lon, $horaCell, $celular, $informacionExtra, $iValido,$horaActual) {
        $datos['host'] = $_SERVER['REMOTE_ADDR'];
        $datos['ngps_latitud'] = $lat;
        $datos['ngps_longitud'] = $lon;
        $datos['dHoraCell'] = $horaCell;
        $datos['vnumeroCell'] = $celular;
        $datos['iValido'] = $iValido;
        $datos['vinformacionExtra'] = $informacionExtra;
        $datos['ntiempo']=$horaActual;
        $arrayTiempos = explode(":", $horaCell);
        if(isset ($arrayTiempos[1])){
            $datos['it1'] = $arrayTiempos[1];
        }
        if(isset ($arrayTiempos[3])){
            $datos['it2'] = $arrayTiempos[3];
        }
         if(isset ($arrayTiempos[5])){
             $datos['it3'] = $arrayTiempos[5];
        }   
        if(isset ($arrayTiempos[7])){
             $datos['it4'] = $arrayTiempos[7];
        }
        if(isset ($arrayTiempos[9])){
            $datos['it5'] = $arrayTiempos[9];
        }
       if(isset ($arrayTiempos[11])){
            $datos['it6'] = $arrayTiempos[11];
        }
       
        
        

        $query = $this->db->insert_string('mmarcacionoriginal', $datos);
        $resultado = $this->db->query($query);
        return $this->db->insert_id();
    }

    function insertaMarcacionCorregida($datos) {
        $datos['host'] = $_SERVER['REMOTE_ADDR'];
        $query = $this->db->insert_string('mmarcacion', $datos);
        $resultado = $this->db->query($query);
        return $this->db->insert_id();
    }

    function controlxsalida($idProgramacionSalida) {
        $idSalida = 0;
        $query = "select  a.idmmarcacion_control,a.ndistancia1,a.ndistancia2,a.ndistancia3,
                a.ndistancia4,a.ndistancia5,a.iestadoDiferencia1,a.iestadoDiferencia2,
                a.iestadoDiferencia3,a.iestadoDiferencia4,a.iestadoDiferencia5,a.iddparaderos,
                a.iddparaderos1,a.ndistanciaParaderoInicial,a.ndistanciaUltimoParadero,
                a.dhoracontrolanterior,a.ngps_latitud1,a.ngps_longitud1,a.ngps_latitud2,a.ngps_longitud2, 
                a.ngps_latitud3,a.ngps_longitud3,a.ngps_latitud4,a.ngps_longitud4,
                a.ngps_latitud5,a.ngps_longitud5 ,a.ngps_latitudPromedio,a.ngps_longitudPromedio, a.iTipoMarcacion,
                a.dHoraControl1,a.dHoraControl2,a.dHoraControl3,a.dHoraControl4,a.dHoraControl5 
                from mmarcacion_control a
                inner join mprogramacionsalidas b on a.idmProgramacionSalidas=b.idmProgramacionSalidas
                where a.iestado=1 and a.idmProgramacionSalidas='$idProgramacionSalida'";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }

    function getControlesSalida($idProgramacionSalida) {

        $query = "select a.idmmarcacion_control,a.iddparaderos, b.vnombre_paradero, 
            a.dHoraControl, b.ngps_latitud1,b.ngps_longitud1,b.iorden,a.iTipoMarcacion, b.idmtipoparadero
            from mmarcacion_control a
            inner join dparaderos b on a.iddparaderos1=b.iddparaderos and b.iestado=1
            where a.idmProgramacionSalidas='$idProgramacionSalida' and b.idmtipoparadero=2 order by a.dHoraControl desc";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }
    
    function obtenerSiguientes($hora,$idControl){
         $query = "select ($hora-dhoraControl) as diferencia,d.vnumero,a.idmProgramacionSalidas from mmarcacion_control a
inner join mprogramacionsalidas c on c.idmProgramacionSalidas=a.idmProgramacionSalidas
inner join mcelulares d on d.idmcelulares=c.idmcelulares
where a.iddparaderos1 in (select b.iddparaderos1 from mmarcacion_control b
where b.idmmarcacion_control=$idControl) and a.dhoraControl<$hora and ($hora-a.dhoraControl)<43200 order by diferencia limit 3";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }
    function controlxsalidaDatos($idProgramacionSalida) {
        $idSalida = 0;
        $query = "select  a.idmmarcacion_control,a.ndistancia1,a.ndistancia2,a.ndistancia3,
                a.ndistancia4,a.ndistancia5,a.dHoraControl1,a.dHoraControl2,a.dHoraControl3,
                a.dHoraControl4,a.dHoraControl5,a.ndistanciaParaderoInicial,a.ndistanciaUltimoParadero
                from mmarcacion_control a
                where a.iestado=1 and a.idmProgramacionSalidas='$idProgramacionSalida'";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }
    function ultimoControl($idProgramacionSalida) {
        $idSalida = 0;
        $query = "select  a.idmmarcacion_control,a.ndistanciaParaderoInicial,a.ndistanciaUltimoParadero
                from mmarcacion_control a
                where a.idmProgramacionSalidas='$idProgramacionSalida' order by a.idmProgramacionSalidas desc limit 1";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }
    function controlInicialxSalida($idProgramacionSalida) {

        $query = "select  a.idmmarcacion_control,a.iddparaderos,a.iddparaderos1,
                  a.ndistanciaParaderoInicial,a.ndistanciaUltimoParadero,a.iTipoMarcacion
                    from mmarcacion_control a
                inner join mprogramacionsalidas b on a.idmProgramacionSalidas=b.idmProgramacionSalidas
                where a.idmProgramacionSalidas=$idProgramacionSalida order by a.dfechacreacion desc limit 1";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }

    function insertaContrlInicial($datos) {
        $datos['vhost'] = $_SERVER['REMOTE_ADDR'];
        $datos['idusuario'] = 1;



        $query = $this->db->insert_string('mmarcacion_control', $datos);
        $resultado = $this->db->query($query);
        return $this->db->insert_id();
    }

    function actualizaControlNuevo($datosActulizar) {

        extract($datosActulizar);

        $query = "update mmarcacion_control
            set idmmarcacionOriginal4=$idmmarcacionOriginal4,
            idmmarcacionOriginal3=$idmmarcacionOriginal3,
            idmmarcacionOriginal2=$idmmarcacionOriginal2,
            idmmarcacionOriginal1=$idmmarcacionOriginal1,
            idmmarcacionOriginal=$idmmarcacionOriginal,
            ndistancia5=$ndistancia5,
            ndistancia4=$ndistancia4,
            ndistancia3=$ndistancia3,
            ndistancia2=$ndistancia2,
            ndistancia1=$ndistancia1,
            iestadoDiferencia5=$iestadoDiferencia5,
            iestadoDiferencia4=$iestadoDiferencia4,
            iestadoDiferencia3=$iestadoDiferencia3,
            iestadoDiferencia2=$iestadoDiferencia2,
            iestadoDiferencia1=$iestadoDiferencia1,
            dHoraControl5=$dHoraControl5,
            dHoraControl4=$dHoraControl4,
            dHoraControl3=$dHoraControl3, 
            dHoraControl2=$dHoraControl2,
            dHoraControl1=$dHoraControl1,
            ngps_longitud5='$ngps_longitud5',
            ngps_longitud4='$ngps_longitud4',
            ngps_longitud3='$ngps_longitud3',
            ngps_longitud2='$ngps_longitud2',
            ngps_longitud1='$ngps_longitud1',
            ngps_latitud5='$ngps_latitud5',
            ngps_latitud4='$ngps_latitud4',
            ngps_latitud3='$ngps_latitud3',
            ngps_latitud2='$ngps_latitud2',
            ngps_latitud1='$ngps_latitud1',
            ngps_latitudPromedio='$ngps_latitudPromedio',
            ngps_longitudPromedio='$ngps_latitudPromedio',
            ndistanciaUltimoParadero=$ndistanciaUltimoParadero,
            iTipoMarcacion=$iTipoMarcacion 
            where idmmarcacion_control=$idmmarcacion_control";
        $this->db->query($query);
        return $this->db->affected_rows();
    }

    function actualizaControlPorCruce($datosActulizar) {
        extract($datosActulizar);

    


        $query = "update mmarcacion_control
        set iTipoMarcacion=$iTipoMarcacion,
            iestado=$iestado,
            dHoraControl=$dHoraControl,
            iTipoMarcacion=$iTipoMarcacion,
            ndistanciaUltimoParadero=$ndistanciaUltimoParadero 
            where idmmarcacion_control=$idmmarcacion_control";
        $this->db->query($query);
        return $this->db->affected_rows();
    }

    function cambioEstadoControl($idMarcacionControl, $iTipoMarcacion) {
        $query = "update mmarcacion_control
        set iTipoMarcacion=$iTipoMarcacion 
            where idmmarcacion_control=$idMarcacionControl";
        $this->db->query($query);
        return $this->db->affected_rows();
    }

    function actualizaControl($datosActualizacion) {

        $idmmarcacion_control = $datosActualizacion['idMarcacionControl'];
        $idmmarcacion = $datosActualizacion['idmmarcacion'];
        $iestado = $datosActualizacion['estadoCruce'];
        $distancia = $datosActualizacion['distanciaNueva'];
        $estadoDiferencia = $datosActualizacion['e1'];
        $dHoraControl = $datosActualizacion['dHoraControl'];
        $dHoraControl1 = $datosActualizacion['dHoraControl1'];
        $ditanciaReal = $datosActualizacion['ditanciaReal'];
        $longitud = $datosActualizacion['longitud'];
        $latitud = $datosActualizacion['latitud'];
        $longitudPromedio = $datosActualizacion['longitudPromedio'];
        $latitudPromedio = $datosActualizacion['latitudPromedio'];
        $iTipoMarcacion = $datosActualizacion['iTipoMarcacion'];

        $query = "update mmarcacion_control
            set iestado=$iestado,
            idmmarcacionOriginal4=idmmarcacionOriginal3,
            idmmarcacionOriginal3=idmmarcacionOriginal2,
            idmmarcacionOriginal2=idmmarcacionOriginal1,
            idmmarcacionOriginal1=idmmarcacionOriginal,
            idmmarcacionOriginal=$idmmarcacion,
            ndistancia5=ndistancia4,
            ndistancia4=ndistancia3,
            ndistancia3=ndistancia2,
            ndistancia2=ndistancia1,
            ndistancia1=$distancia,
            iestadoDiferencia5=iestadoDiferencia4,
            iestadoDiferencia4=iestadoDiferencia3,
            iestadoDiferencia3=iestadoDiferencia2,
            iestadoDiferencia2=iestadoDiferencia1,
            iestadoDiferencia1=$estadoDiferencia,
            dHoraControl=$dHoraControl,
            dHoraControl5=dHoraControl4,
            dHoraControl4=dHoraControl3,
            dHoraControl3=dHoraControl2, 
            dHoraControl2=dHoraControl1,
            dHoraControl1=$dHoraControl1,
            ngps_longitud5=ngps_longitud4,
            ngps_longitud4=ngps_longitud3,
            ngps_longitud3=ngps_longitud2,
            ngps_longitud2=ngps_longitud1,
            ngps_longitud1='$longitud',
            ngps_latitud5=ngps_latitud4,
            ngps_latitud4=ngps_latitud3,
            ngps_latitud3=ngps_latitud2,
            ngps_latitud2=ngps_latitud1,
            ngps_latitud1='$latitud',
            ngps_latitudPromedio='$latitudPromedio',
            ngps_longitudPromedio='$longitudPromedio',
            ndistanciaUltimoParadero=$ditanciaReal,
            iTipoMarcacion=$iTipoMarcacion
            where idmmarcacion_control=$idmmarcacion_control";
        $this->db->query($query);
        return $this->db->affected_rows();
    }

    function getMarcacionesId($id) {
        $query = "select idmmarcacion,ngps_latitud,ngps_longitud, dFechaCreacion, dHoraCell from mmarcacion ";
        $query.="where idmmarcacion=$id";
        $tabla = $this->db->query($query);
        return $tabla->result_array();
    }
    function controlParadero1Salida($paradero1,$idProgramacionSalida){
        $query = "select idmmarcacion_control, iestado,dHoraControl,iTipoMarcacion from mmarcacion_control 
            where idmProgramacionSalidas=$idProgramacionSalida and iddparaderos1=$paradero1
            ";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }
    function controlParadero2Salida($paradero1,$idProgramacionSalida){
        $query = "select iestado,dHoraControl,iTipoMarcacion,ndistanciaUltimoParadero from mmarcacion_control 
            where idmProgramacionSalidas=$idProgramacionSalida and iddparaderos=$paradero1
            ";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }
    function getOtrasUnidades($idProgramacionSalida, $distanciaMostrar, $horaAnterior) {
        $query = "select (a.ndistanciaUltimoParadero-$distanciaMostrar) as diferencia, 
            ($horaAnterior-g.dhoracontrolanterior) as diferenciatiempos , f.vplaca
            from mmarcacion_control a
            inner join mprogramacionsalidas d on a.idmProgramacionSalidas=d.idmProgramacionSalidas
            inner join dtransporte_linea e on e.iddtransporte_linea=d.iddtransporte_linea
            inner join mtransporte f on e.idmTransporte=f.idmTransporte
            inner join mmarcacion_control g on a.idmProgramacionSalidas=g.idmProgramacionSalidas
            and a.iddparaderos=g.iddparaderos
            where a.iestado=1 and a.idmProgramacionSalidas<>$idProgramacionSalida and a.idmProgramacionSalidas in
            (select  b.idmProgramacionSalidas from mprogramacionsalidas b
            where b.iestado=1 and b.idmruta in 
            (select c.idmruta from mprogramacionsalidas c
                where c.idmProgramacionSalidas=$idProgramacionSalida
            )) and a.ndistanciaUltimoParadero > $distanciaMostrar order by diferencia  limit 3;
            ";

        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }

    function getPuntosAnteriores($celular, $numeroPuntos, $tolerancia) {
        //$tolerancia=2000;

        $query = "select a.idmmarcacionOriginal, a.ngps_longitud,a.ngps_latitud,
                DATE_FORMAT(a.dFechaCreacion,'%d/%m/%y/%k/%i/%s') as dFechaCreacion, a.ntiempo
                from mmarcacionoriginal a
                where a.vnumeroCell='$celular' and TIMEDIFF(now(),a.dFechaCreacion)< time('$tolerancia')
                and iValido=1 order by a.idmmarcacionOriginal desc limit $numeroPuntos 
                ";
        //echo "<br>$query<br>";
        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }

    function getMarcacionesxSalida($id) {
        $query = "select @rownum:=@rownum+1 'numero',c.ngps_longitud,c.ngps_latitud,c.dFechaCreacion 
                from mprogramacionsalidas a 
                inner join mmarcacion b on a.idmProgramacionSalidas=b.idmProgramacionSalidas
                inner join mmarcacionoriginal c on  b.idmmarcacionOriginal=c.idmmarcacionOriginal,
                (SELECT @rownum:=0) R 
                where a.idmProgramacionSalidas=$id order by c.idmmarcacionOriginal
                ";
        //echo "<br>$query<br>";
        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }

    function insertaRespuestaServidor($data) {

        $this->db->insert('drespuestaServidor', $data);
        return $this->db->insert_id();
    }

    function getMarcacionesCelular($datos) {
        $vnumero = $datos['vnumero'];
        $fecha1 = $datos['fechaHora1'];
        $fecha2 = $datos['fechaHora2'];
        $tipo = $datos['tipo'];
        if ($tipo == 2) {
            $where = "";
        } else {
            $where = "and iValido=$tipo";
        }
        $query = "select @rownum:=@rownum+1 'numero', idmmarcacionOriginal,
        ngps_latitud,ngps_longitud,dfechaCreacion, FROM_UNIXTIME(ntiempo)
        from mmarcacionoriginal,
         (SELECT @rownum:=0) R 
        where vnumeroCell='$vnumero'
          and 
        dfechaCreacion >'$fecha1' and dfechaCreacion <'$fecha2' $where order by idmmarcacionOriginal desc";
        //echo "<br>$query<br>";
        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }

    function getMarcacionesCelularRespuesta($datos) {
        $vnumero = $datos['vnumero'];
        $fecha1 = $datos['fechaHora1'];
        $fecha2 = $datos['fechaHora2'];
        $tipo = $datos['tipo'];
        if ($tipo == 2) {
            $where = "";
        } else {
            $where = "and a.iValido=$tipo";
        }
        $query = "select @rownum:=@rownum+1 'numero', a.idmmarcacionOriginal,
        a.ngps_latitud,a.ngps_longitud,a.dfechaCreacion,b.vrespuesta,FROM_UNIXTIME(a.ntiempo) as ntiempo
        from mmarcacionoriginal a
        left join drespuestaServidor b on a.idmmarcacionOriginal=b.idmmarcacionOriginal,
        
         (SELECT @rownum:=0) R 
        where vnumeroCell='$vnumero'
        and 
        a.dfechaCreacion >'$fecha1' and a.dfechaCreacion <'$fecha2' $where 
        order by idmmarcacionOriginal desc        ";
        //echo "<br>$query<br>";
        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = array();
        } else {
            $resultado = $tabla->result_array();
        }
        return $resultado;
    }
    function getRespuestaCelular($id){
        $query = "select vrespuesta
        from drespuestaServidor where idmmarcacionOriginal=$id ";
        $tabla = $this->db->query($query);
        if ($tabla->num_rows() == 0) {
            $resultado = '';
        } else {
            $resultado = $tabla->result_array();
            $resultado=$resultado[0]['vrespuesta'];
        }
        return $resultado;
        
    }

}

?>
